function plot_ofdma_signals(time_domain_symbols, ofdma_signal, received_symbols)
% plot_ofdma_signals - 绘制OFDMA系统的时域信号和频谱
%
% 输入参数:
%   time_domain_symbols - 未添加循环前缀的时域OFDM符号
%   ofdma_signal       - 添加循环前缀后的完整OFDMA信号
%   received_symbols   - 接收端去除循环前缀后的符号

% 获取参数
[num_samples, num_symbols] = size(time_domain_symbols);
[num_samples_with_cp, ~] = size(ofdma_signal);
cp_length = num_samples_with_cp / num_symbols - num_samples;

% 创建新图形
figure('Name', 'OFDMA信号', 'Position', [100, 100, 1200, 800]);

% 绘制第一个OFDM符号的时域波形（发送端）
subplot(3, 2, 1);
plot(1:num_samples, real(time_domain_symbols(:,1)), 'b');
hold on;
plot(1:num_samples, imag(time_domain_symbols(:,1)), 'r');
title('OFDM符号时域波形（发送端）');
xlabel('样本');
ylabel('幅度');
legend('实部', '虚部');
grid on;

% 绘制添加循环前缀的示意图
subplot(3, 2, 2);
ofdm_with_cp = ofdma_signal(:,1);  % 取第一个符号
total_len = length(ofdm_with_cp);

plot(1:total_len, real(ofdm_with_cp), 'b');
hold on;
area(1:cp_length, real(ofdm_with_cp(1:cp_length)), 'FaceColor', [0.8 0.8 1], 'EdgeColor', 'none', 'FaceAlpha', 0.5);
plot(1:cp_length, real(ofdm_with_cp(1:cp_length)), 'b', 'LineWidth', 2);
area(cp_length+1:total_len, real(ofdm_with_cp(cp_length+1:end)), 'FaceColor', [1 0.8 0.8], 'EdgeColor', 'none', 'FaceAlpha', 0.5);
plot([cp_length+0.5 cp_length+0.5], ylim, 'k--');
title('循环前缀添加示意图');
xlabel('样本');
ylabel('幅度');
legend('信号', '循环前缀', '数据部分');
grid on;

% 绘制发送信号频谱
subplot(3, 2, 3);
% 计算并绘制发送符号的频谱
fft_size = 2048;  % 使用更大的FFT以获得更好的频谱分辨率
tx_signal_serial = reshape(time_domain_symbols, [], 1);
tx_fft = fftshift(fft(tx_signal_serial, fft_size));
tx_freq = (-fft_size/2:fft_size/2-1) / fft_size;
plot(tx_freq, 20*log10(abs(tx_fft)/length(tx_signal_serial)));
title('OFDMA发送信号频谱');
xlabel('归一化频率');
ylabel('功率谱密度 (dB)');
grid on;
xlim([-0.5 0.5]);
ylim([-60 20]);

% 绘制接收信号频谱
subplot(3, 2, 4);
% 计算并绘制接收符号的频谱
rx_signal_serial = reshape(received_symbols, [], 1);
rx_fft = fftshift(fft(rx_signal_serial, fft_size));
rx_freq = (-fft_size/2:fft_size/2-1) / fft_size;
plot(rx_freq, 20*log10(abs(rx_fft)/length(rx_signal_serial)));
title('OFDMA接收信号频谱');
xlabel('归一化频率');
ylabel('功率谱密度 (dB)');
grid on;
xlim([-0.5 0.5]);
ylim([-60 20]);

% 绘制发送信号星座图
subplot(3, 2, 5);
% 对第一个符号进行FFT，获取频域符号
tx_freq_symbols = fft(time_domain_symbols(:, 1));
% 绘制星座图（仅使用有数据的子载波）
plot(real(tx_freq_symbols), imag(tx_freq_symbols), 'b.');
title('发送符号星座图');
xlabel('实部');
ylabel('虚部');
grid on;
axis equal;

% 绘制接收信号星座图
subplot(3, 2, 6);
% 对第一个接收符号进行FFT，获取频域符号
rx_freq_symbols = fft(received_symbols(:, 1));
% 绘制星座图（仅使用有数据的子载波）
plot(real(rx_freq_symbols), imag(rx_freq_symbols), 'r.');
title('接收符号星座图');
xlabel('实部');
ylabel('虚部');
grid on;
axis equal;

% 添加总标题
sgtitle('OFDMA信号时域波形和频谱');

end 